﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _16.extension
{
    //扩展方法 - 
    //1. 必须在静态类中定义静态方法
    //2. 静态方法的参数类型之前必须加一个this！
    class Program
    {
        static void Main(string[] args)
        {
            //普通类的扩展方法
            string str = "hello world, i love c#. and you?";
            Console.WriteLine(str.WordCount());

            Console.WriteLine("------------");

            //枚举的扩展方法
            var b = Grades.F.Passing();
            Console.WriteLine(b);
            b = Grades.D.Passing();
            Console.WriteLine(b);
            b = Grades.A.Passing();
            Console.WriteLine(b);

            Console.ReadKey();
        }

    }

    //扩展方法
    static class StringEx
    {
        public static int WordCount(this string str) //参数必须以this开头！
        {
            //这里对Split的运用也是无敌了
            return str.Split(new char[] { ' ', '.', ',', '!', '?' }, StringSplitOptions.RemoveEmptyEntries).Length;
        }
    }

    enum Grades { F, E, D, C, B, A }
    static class GradesEx //给枚举添加扩展方法
    {
        public static bool Passing(this Grades grades)
        {
            return grades >= Grades.D;
        }
    }
}
